next
hasnext

     start [
        next -> unsafe,
        hasnext -> safe,
        default: start
     ]
     safe [
        next -> start
        hasnext -> safe
     ]
     unsafe [
        next -> unsafe
        hasnext -> safe
     ]
